10 ON ERROR GOTO 0:SCREEN 0:KEY OFF:CLS:DEFINT A-Z:DIM PREFER$(20)
20 COLOR 0,7:PRINT STRING$(240,32):LOCATE 1,1:PRINT TAB(35) "LISTER.BAS":PRINT "Prints a formatted listing of a BASIC program saved with the ,A option.":PRINT "Uses IBM PC printer to produce 40, 63, 80, or 132 character listings."
30 PRINT "Set 'Width' at appropriate setting and remember margin settings must agree. ":COLOR 7,0:LINE INPUT"Today's date: ";TODAY$:L.MGN=5:R.MGN=72:B.MGN=8:LN.SPA=1:PG.LEN=66:PG.WID=80:DBL.WID=20:FLNM$="":HEADER$="":INDENT$=SPACE$(8)
70 PRINT ARROW$;:COLOR 0,7:PRINT " Use F-keys to set the listing format ";:COLOR 7,0:PRINT ARROW$:RESTORE:FOR I=0 TO 9:READ FKEY$(I):NEXT:DATA Lt,Rt,Bo,Wi,Si,Do,P',He,Re," B":FOR IP=0 TO 20:READ Z$:IF Z$<>"END" THEN PREFER$(IP)=Z$:NEXT IP
80 IP=IP-1:DATA " ELSE "," THEN ",": "," PRINT":DATA " IF "," '"," OR "," AND ",";"
90 DATA "="," ","+","*",",", END
100 LINE INPUT Z$:FOR I=0 TO 9:IF LEFT$(Z$,2)=FKEY$(I) GOTO 110 ELSE NEXT :GOTO 100
110 ON I+1 GOTO 120,130,140,220,160,170,180,150,280,320
120 GOSUB 530:L.MGN=NUMBA:GOTO 100
130 GOSUB 530:R.MGN=NUMBA:GOTO 100
140 GOSUB 530:B.MGN=NUMBA:GOTO 100
150 HEADER$=MID$(Z$,9):GOTO 100
160 LN.SPA=1:GOTO 100
170 LN.SPA=2:GOTO 100
180 FLNM$=MID$(Z$,13)
190 IF LEFT$(FLNM$,1)=" " THEN FLNM$=MID$(FLNM$,2):GOTO 190
200 IF HEADER$="" THEN HEADER$=CHR$(34)+FLNM$+CHR$(34)
210 GOTO 100
220 GOSUB 530:IF NUMBA>132 THEN PRINT "Maximum page width is limited 132 characters":GOTO 100
230 IF NUMBA>80 AND NUMBA<133 THEN LPRINT CHR$(20);CHR$(15);:WIDTH "lpt1:",132 ELSE WIDTH "lpt1:",80
240 IF NUMBA>66 AND NUMBA<81 THEN LPRINT CHR$(18);CHR$(20);
250 DBL.WID=20:IF NUMBA>40 AND NUMBA<67 THEN LPRINT CHR$(15);:DBL.WID=14
320 LN.LEN=R.MGN-L.MGN+1:IF L.MGN<1 OR L.MGN>R.MGN-20 OR R.MGN<L.MGN+20 OR R.MGN>PG.WID-2 OR B.MGN<5 OR PG.WID<LN.LEN OR LEN(HEADER$)>LN.LEN-10 THEN BEEP:PRINT "CAN'T BEGIN. CHECK THE MARGIN & WIDTH SPECIFICATIONS or LENGTH OF HEADER":GOTO 70
330 FLNM$=FLNM$:ON ERROR GOTO 520
340 OPEN FLNM$ FOR INPUT AS #1:ON ERROR GOTO 0:LPRINT:LPRINT CHR$(DBL.WID);TAB(L.MGN);HEADER$;:IF TODAY$="" THEN LPRINT ELSE LPRINT ", listed ";TODAY$